const state = {
	shopCartList: [],
	selectedList: []
};
const mutations = {
	// 全选
	checkAll(state) {
		state.selectedList = state.shopCartList.map(v => {
			v.checked = true;
			return v.id;
		})
	},
	// 全不选
	uncheckAll(state) {
		state.shopCartList.forEach(v => {
			v.checked = false;
		});
		state.selectedList = [];
	},
	// 单选
	selectItem(state, index) {
		// console.log(index);
		let id = state.shopCartList[index].id;
		// console.log(id);
		let i = state.selectedList.indexOf(id);
		// 若selectList已经存在就代表它已是选中状态，那就把它选中状态置为false，且在selectList中删除
		if (i > -1) {
			state.shopCartList[index].checked = false;
			return state.selectedList.splice(i, 1)
		} else {
			// 若selectList不存在就代表它是非选中状态，那就把它选中状态置为true，且在selectList中添加
			state.shopCartList[index].checked = true;
			state.selectedList.push(id);
		}
	},
	// 删除商品
	delGoods(state) {
		// filter函数是数组里的一个方法，它主要起到的是过滤作用，filter()创建一个新的数组，新数组中的元素是通过检查指定数组中符合条件的所有元素。
		state.shopCartList = state.shopCartList.filter(v => {
			return state.selectedList.indexOf(v.id) == -1;
		})
	},
	// 添加商品
	addToShopCart(state, goods) {
		// 购物车数组不为空时，非首次添加商品
		if (state.shopCartList.length > 0) {
			for (let i in state.shopCartList) {
				// 若购物车内存在相同商品，则数量增加
				if (state.shopCartList[i].id == goods.id) {
					// console.log(111);
					return state.shopCartList[i].num = state.shopCartList[i].num + goods.num;
					// break;
				} 
			}
			// 若购物车内不存在，新增此商品
			// console.log(222);
			state.shopCartList.push(goods);
		} else {
			// 购物车数组为空时，首次添加商品
			// console.log(333);
			state.shopCartList.push(goods);
		}
	}
};
const actions = {
	// 全选按钮事务
	checkAllFn({
		commit,
		getters
	}) {
		// console.log(111);
		getters.isCheckAll ? commit("uncheckAll") : commit("checkAll");
	},
	// 删除商品
	delGoodsFn({
		commit
	}) {
		commit('delGoods');
		uni.showToast({
			title: '删除成功',
			icon: "none"
		})
	},
};
const getters = {
	// 判断是否为全选
	isCheckAll(state) {
		return state.shopCartList.length == state.selectedList.length
	},
	// 计算总金额和价格
	totalCountAndPrice(state) {
		// console.log(state.selectedList.length);
		let total = {
			price: 0,
			count: 0
		}
		state.shopCartList.forEach(v => {
			// console.log(v.id, v.checked);
			// 是否选中
			if (state.selectedList.indexOf(v.id) > -1) {
				total.count++;
				total.price += v.price_new * v.num;
			}
		})
		// console.log(total);
		return total;
	},

};
export default {
	state,
	mutations,
	actions,
	getters
};
